package com.gkzf.ai.module.crm.service.product.admin;

import com.gkzf.ai.framework.common.pojo.PageResult;
import com.gkzf.ai.module.crm.controller.admin.product.vo.repayment.CrmProductRepaymentListReqVO;
import com.gkzf.ai.module.crm.controller.admin.product.vo.repayment.CrmProductRepaymentPageReqVO;
import com.gkzf.ai.module.crm.controller.admin.product.vo.repayment.CrmProductRepaymentSaveReqVO;
import com.gkzf.ai.module.crm.dal.dataobject.product.CrmProductRepaymentDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * @author Huawei
 * @date 2025-03-31
 */
public interface CrmProductRepaymentService {
    /**
     * 创建CRM 产品还款方式
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProductRepayment(@Valid CrmProductRepaymentSaveReqVO createReqVO);


    /**
     * 创建CRM 产品还款方式
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    void createBatchProductRepayment(@Valid List<@Valid CrmProductRepaymentSaveReqVO> createReqVO);

    /**
     * 更新CRM 产品还款方式
     *
     * @param updateReqVO 更新信息
     */
    void updateProductRepayment(@Valid CrmProductRepaymentSaveReqVO updateReqVO);

    /**
     * 根据productId 更新 CRM 产品还款方式
     *
     * @param updateReqVO 更新信息
     */
    void updateProductRepaymentByProductId(@Valid List<@Valid CrmProductRepaymentSaveReqVO> updateReqVO,Long productId);

    /**
     * 删除CRM 产品还款方式
     *
     * @param id 编号
     */
    void deleteProductRepayment(Long id);

    /**
     * 获得CRM 产品还款方式
     *
     * @param id 编号
     * @return CRM 产品还款方式
     */
    CrmProductRepaymentDO getProductRepayment(Long id);

    /**
     * 获得CRM 产品还款方式Vo
     *
     * @param ProductId 编号
     * @return 根据 获取对象ProductId vo对象集合
     */
    List<CrmProductRepaymentDO> getProductRepaymentListAll();

    /**
     * 获得CRM 产品还款方式Vo
     *
     * @param ProductId 编号
     * @return 根据 获取对象ProductId vo对象集合
     */
    List<CrmProductRepaymentListReqVO> getProductRepaymentListVoAll(List<CrmProductRepaymentDO> productRepaymentListAll,Long productId);


    /**
     * 获得CRM 产品还款方式
     *
     * @param id 编号
     * @return CRM 产品还款方式
     */
    List<CrmProductRepaymentListReqVO> getProductRepaymentByProductId(Long productId);

    /**
     * 获得CRM 产品还款方式分页
     *
     * @param pageReqVO 分页查询
     * @return CRM 产品还款方式分页
     */
    PageResult<CrmProductRepaymentDO> getProductRepaymentPage(CrmProductRepaymentPageReqVO pageReqVO);

}
